#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <string>
#include <functional>
#include <vector>

#include <sys/wait.h>
#include <sys/types.h>

using namespace std;

void catchSig(int signum)
{
    sleep(1);
    cout << "捕捉到了一个信号，正在处理：" << signum << ", pid: " << getpid() << endl;
}

int main()
{   
    signal(SIGFPE, catchSig);
    int a = 10;
    a /= 0;

    while (true) sleep(1);

    return 0;
}

// typedef function<void()> func;
// vector<func> callbacks;

// uint64_t count = 0;

// void showCount()
// {
//     cout << "count: " << count << endl;
// }

// void catchSig(int signum)
// {
//     cout << "捕捉到了一个信号，正在处理：" << signum << ", pid: " << getpid() << endl;

//     for (auto& f : callbacks)
//     {
//         f();
//     }
//     alarm(1);
// }

// int main()
// {
//     // 要捕捉的信号
//     signal(SIGALRM, catchSig);

//     // 设置闹钟
//     alarm(1);

//     // 添加函数
//     callbacks.push_back(showCount);

//     while(true) count++;

//     return 0;
// }

// static void Usage(string proc)
// {
//     cout << "Usage:\r\n\t" << proc << " signumber pid" << endl;
// }

// // ./mykill 2 pid
// int main(int argc, char* argv[])
// {
//     // 
//     if (argc != 3)
//     {
//         Usage(argv[0]);
//     }
//     int signumber = atoi(argv[1]);
//     int procid = atoi(argv[2]);

//     kill(procid, signumber);

//     return 0;
// }